package dletc.thread;
/**
 * Thread类中常用方法：
 * 
 * 四、休眠（阻塞）：类名.sleep(Long time（毫秒）);
 * 	
 * 	作用：让**【当前线程】**进入休眠状态，放弃占用cpu时间片，让给其他线程使用,但不会释放lock
 * 		这个方法出现在线程A里，线程A就进入休眠状态，休眠到给定的时间结束。
 * 
 * 	应用场景：想要实现 间隔多久 执行某段功能 的时候使用  [定时器功能、倒计时]。
 *
 *  让位：Thread.yield（）;
 *  作用：当前线程从运行状态回到就绪状态后，也有可能还会抢到时间片
 */
public class Demo04 {

	public static void main(String[] args) {
		
		for (int i = 0; i < 10; i++) {
			
			try {
				//休眠2秒  输出语句在休眠前 先输出语句在休眠，在后，先休眠在输出。
				/* 异常只能try catch不能throws 为什么？ **子类继承父类 不能抛出更多的异常**。
				 * 重点：run()当中的异常不能throws，只能try catch
				 * 因为run()方法在父类中没有抛出任何异常，子类不能比父类抛出更多的异常。
				 * */
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			System.out.println(Thread.currentThread().getName() + "--------" + i);
		}

	}

}

/* 	八、还有一个让位方法：Thread.yield()
* 		暂停当前正在执行的线程对象，并执行其他线程
* 		yield()方法不是阻塞方法，当前对象让位，让给其他线程使用
* 		yield()方法的执行会让当前线程从“运行状态”回到“就绪状态”。
* 		注意：在回到就绪状态后，也有可能还会抢到时间片。*/
class TestYield implements Runnable{

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName() + "线程开始");
		Thread.yield(); //让位 不一定成功
		System.out.println(Thread.currentThread().getName() + "线程结束");
	}

	public static void main(String[] args) {

		TestYield testYield = new TestYield();
		new Thread(testYield,"A").start();
		new Thread(testYield,"B").start();
	}
}
